package com.obelisco.modelo.dao.hibernate;

import java.io.Serializable;
import java.util.List;
import java.util.ResourceBundle;

import org.hibernate.validator.ClassValidator;
import org.hibernate.validator.InvalidValue;

import com.obelisco.exception.ObeliscoException;
import com.obelisco.modelo.dao.IGrupoDAO;
import com.obelisco.modelo.data.Grupo;
import com.obelisco.modelo.data.Sistema;

public class GrupoDAO extends HibernateDAO<Grupo> implements IGrupoDAO {

	Sistema sistema;

	public Sistema getSistema() {
		return sistema;
	}

	public void setSistema(Sistema sistema) {
		this.sistema = sistema;
	}

	public Grupo findByPK(Serializable clave) {
		// TODO Auto-generated method stub
		return null;
	}

	public List<Grupo> loadAll() {
		// TODO Auto-generated method stub
		// List lista = getHibernateTemplate().find(
		// "from Grupo grupo where grupo.estado != 'B'");
		return loadAll(sistema);
	}

	public void delete(Grupo grupo) {
		// TODO Auto-generated method stub
		if (grupo.getDesistema().booleanValue()) {
			throw new ObeliscoException(
					"No se puede eliminar un Grupo de Sistema");
		} else {
			getHibernateTemplate().delete(grupo);
		}
	}

	ClassValidator<Grupo> grupoValidator = new ClassValidator<Grupo>(Grupo.class,
			ResourceBundle
					.getBundle("com.obelisco.modelo.data.hibernate-validator"));

	public void validate(Grupo objeto) {

		InvalidValue[] validationMessages = grupoValidator
				.getInvalidValues(objeto);

		StringBuffer errores = new StringBuffer();
		for (int i = 0; i < validationMessages.length; i++) {
			InvalidValue value = validationMessages[i];
			errores.append(value.getPropertyName() + " - " + value.getMessage()
					+ "<br/>");
		}

		if (errores.length() > 0)
			throw new ObeliscoException(errores.toString());

	}

	public void save(Grupo objeto) {
		Grupo grupo = (Grupo) objeto;
		grupo.getId().setSistema(sistema);

		validate(objeto);
		getHibernateTemplate().saveOrUpdate(objeto);
	}

	@SuppressWarnings("unchecked")
	public List<Grupo> findByProperty(String propertyName, Object value) {
		String queryString = "from Grupo grupo where grupo." + propertyName
				+ "= ?";
		return getHibernateTemplate().find(queryString, value);

	}

	public List<Grupo> loadAll(Sistema sistema) {
		// TODO Auto-generated method stub
		return findByProperty("id.sistema", sistema);
	}

}
